home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SATAN11.ZIP / SRC / NFS-CHK / NFS_PROT.X < prev    next >
Encoding:
Text File  |  1994-11-22  |  8.0 KB  |  358 lines

  1. /*
  2.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  3.  * unrestricted use provided that this legend is included on all tape
  4.  * media and as a part of the software program in whole or part.  Users
  5.  * may copy or modify Sun RPC without charge, but are not authorized
  6.  * to license or distribute it to anyone else except as part of a product or
  7.  * program developed by the user.
  8.  * 
  9.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  10.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  11.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  12.  * 
  13.  * Sun RPC is provided with no support and without any obligation on the
  14.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  15.  * modification or enhancement.
  16.  * 
  17.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  18.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  19.  * OR ANY PART THEREOF.
  20.  * 
  21.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  22.  * or profits or other special, indirect and consequential damages, even if
  23.  * Sun has been advised of the possibility of such damages.
  24.  * 
  25.  * Sun Microsystems, Inc.
  26.  * 2550 Garcia Avenue
  27.  * Mountain View, California  94043
  28.  */
  29.  
  30. #ifndef RPC_HDR
  31. %#ifndef lint
  32. %/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
  33. %/*static char sccsid[] = "from: @(#)nfs_prot.x    2.1 88/08/01 4.0 RPCSRC";*/
  34. %static char rcsid[] = "$Id: nfs_prot.x,v 1.1 1994/08/04 19:01:47 wollman Exp $";
  35. %#endif /* not lint */
  36. #endif
  37.  
  38. const NFS_PORT          = 2049;
  39. const NFS_MAXDATA       = 8192;
  40. const NFS_MAXPATHLEN    = 1024;
  41. const NFS_MAXNAMLEN    = 255;
  42. const NFS_FHSIZE    = 32;
  43. const NFS_COOKIESIZE    = 4;
  44. const NFS_FIFO_DEV    = -1;    /* size kludge for named pipes */
  45.  
  46. /*
  47.  * File types
  48.  */
  49. const NFSMODE_FMT  = 0170000;    /* type of file */
  50. const NFSMODE_DIR  = 0040000;    /* directory */
  51. const NFSMODE_CHR  = 0020000;    /* character special */
  52. const NFSMODE_BLK  = 0060000;    /* block special */
  53. const NFSMODE_REG  = 0100000;    /* regular */
  54. const NFSMODE_LNK  = 0120000;    /* symbolic link */
  55. const NFSMODE_SOCK = 0140000;    /* socket */
  56. const NFSMODE_FIFO = 0010000;    /* fifo */
  57.  
  58. /*
  59.  * Error status
  60.  */
  61. enum nfsstat {
  62.     NFS_OK= 0,        /* no error */
  63.     NFSERR_PERM=1,        /* Not owner */
  64.     NFSERR_NOENT=2,        /* No such file or directory */
  65.     NFSERR_IO=5,        /* I/O error */
  66.     NFSERR_NXIO=6,        /* No such device or address */
  67.     NFSERR_ACCES=13,    /* Permission denied */
  68.     NFSERR_EXIST=17,    /* File exists */
  69.     NFSERR_NODEV=19,    /* No such device */
  70.     NFSERR_NOTDIR=20,    /* Not a directory*/
  71.     NFSERR_ISDIR=21,    /* Is a directory */
  72.     NFSERR_FBIG=27,        /* File too large */
  73.     NFSERR_NOSPC=28,    /* No space left on device */
  74.     NFSERR_ROFS=30,        /* Read-only file system */
  75.     NFSERR_NAMETOOLONG=63,    /* File name too long */
  76.     NFSERR_NOTEMPTY=66,    /* Directory not empty */
  77.     NFSERR_DQUOT=69,    /* Disc quota exceeded */
  78.     NFSERR_STALE=70,    /* Stale NFS file handle */
  79.     NFSERR_WFLUSH=99    /* write cache flushed */
  80. };
  81.  
  82. /*
  83.  * File types
  84.  */
  85. enum ftype {
  86.     NFNON = 0,    /* non-file */
  87.     NFREG = 1,    /* regular file */
  88.     NFDIR = 2,    /* directory */
  89.     NFBLK = 3,    /* block special */
  90.     NFCHR = 4,    /* character special */
  91.     NFLNK = 5,    /* symbolic link */
  92.     NFSOCK = 6,    /* unix domain sockets */
  93.     NFBAD = 7,    /* unused */
  94.     NFFIFO = 8     /* named pipe */
  95. };
  96.  
  97. /*
  98.  * File access handle
  99.  */
  100. struct nfs_fh {
  101.     opaque data[NFS_FHSIZE];
  102. };
  103.  
  104. /* 
  105.  * Timeval
  106.  */
  107. struct nfstime {
  108.     unsigned seconds;
  109.     unsigned useconds;
  110. };
  111.  
  112.  
  113. /*
  114.  * File attributes
  115.  */
  116. struct fattr {
  117.     ftype type;        /* file type */
  118.     unsigned mode;        /* protection mode bits */
  119.     unsigned nlink;        /* # hard links */
  120.     unsigned uid;        /* owner user id */
  121.     unsigned gid;        /* owner group id */
  122.     unsigned size;        /* file size in bytes */
  123.     unsigned blocksize;    /* prefered block size */
  124.     unsigned rdev;        /* special device # */
  125.     unsigned blocks;    /* Kb of disk used by file */
  126.     unsigned fsid;        /* device # */
  127.     unsigned fileid;    /* inode # */
  128.     nfstime    atime;        /* time of last access */
  129.     nfstime    mtime;        /* time of last modification */
  130.     nfstime    ctime;        /* time of last change */
  131. };
  132.  
  133. /*
  134.  * File attributes which can be set
  135.  */
  136. struct sattr {
  137.     unsigned mode;    /* protection mode bits */
  138.     unsigned uid;    /* owner user id */
  139.     unsigned gid;    /* owner group id */
  140.     unsigned size;    /* file size in bytes */
  141.     nfstime    atime;    /* time of last access */
  142.     nfstime    mtime;    /* time of last modification */
  143. };
  144.  
  145.  
  146. typedef string filename<NFS_MAXNAMLEN>; 
  147. typedef string nfspath<NFS_MAXPATHLEN>;
  148.  
  149. /*
  150.  * Reply status with file attributes
  151.  */
  152. union attrstat switch (nfsstat status) {
  153. case NFS_OK:
  154.     fattr attributes;
  155. default:
  156.     void;
  157. };
  158.  
  159. struct sattrargs {
  160.     nfs_fh file;
  161.     sattr attributes;
  162. };
  163.  
  164. /*
  165.  * Arguments for directory operations
  166.  */
  167. struct diropargs {
  168.     nfs_fh    dir;    /* directory file handle */
  169.     filename name;        /* name (up to NFS_MAXNAMLEN bytes) */
  170. };
  171.  
  172. struct diropokres {
  173.     nfs_fh file;
  174.     fattr attributes;
  175. };
  176.  
  177. /*
  178.  * Results from directory operation
  179.  */
  180. union diropres switch (nfsstat status) {
  181. case NFS_OK:
  182.     diropokres diropres;
  183. default:
  184.     void;
  185. };
  186.  
  187. union readlinkres switch (nfsstat status) {
  188. case NFS_OK:
  189.     nfspath data;
  190. default:
  191.     void;
  192. };
  193.  
  194. /*
  195.  * Arguments to remote read
  196.  */
  197. struct readargs {
  198.     nfs_fh file;        /* handle for file */
  199.     unsigned offset;    /* byte offset in file */
  200.     unsigned count;        /* immediate read count */
  201.     unsigned totalcount;    /* total read count (from this offset)*/
  202. };
  203.  
  204. /*
  205.  * Status OK portion of remote read reply
  206.  */
  207. struct readokres {
  208.     fattr    attributes;    /* attributes, need for pagin*/
  209.     opaque data<NFS_MAXDATA>;
  210. };
  211.  
  212. union readres switch (nfsstat status) {
  213. case NFS_OK:
  214.     readokres reply;
  215. default:
  216.     void;
  217. };
  218.  
  219. /*
  220.  * Arguments to remote write 
  221.  */
  222. struct writeargs {
  223.     nfs_fh    file;        /* handle for file */
  224.     unsigned beginoffset;    /* beginning byte offset in file */
  225.     unsigned offset;    /* current byte offset in file */
  226.     unsigned totalcount;    /* total write count (to this offset)*/
  227.     opaque data<NFS_MAXDATA>;
  228. };
  229.  
  230. struct createargs {
  231.     diropargs where;
  232.     sattr attributes;
  233. };
  234.  
  235. struct renameargs {
  236.     diropargs from;
  237.     diropargs to;
  238. };
  239.  
  240. struct linkargs {
  241.     nfs_fh from;
  242.     diropargs to;
  243. };
  244.  
  245. struct symlinkargs {
  246.     diropargs from;
  247.     nfspath to;
  248.     sattr attributes;
  249. };
  250.  
  251.  
  252. typedef opaque nfscookie[NFS_COOKIESIZE];
  253.  
  254. /*
  255.  * Arguments to readdir
  256.  */
  257. struct readdirargs {
  258.     nfs_fh dir;        /* directory handle */
  259.     nfscookie cookie;
  260.     unsigned count;        /* number of directory bytes to read */
  261. };
  262.  
  263. struct entry {
  264.     unsigned fileid;
  265.     filename name;
  266.     nfscookie cookie;
  267.     entry *nextentry;
  268. };
  269.  
  270. struct dirlist {
  271.     entry *entries;
  272.     bool eof;
  273. };
  274.  
  275. union readdirres switch (nfsstat status) {
  276. case NFS_OK:
  277.     dirlist reply;
  278. default:
  279.     void;
  280. };
  281.  
  282. struct statfsokres {
  283.     unsigned tsize;    /* preferred transfer size in bytes */
  284.     unsigned bsize;    /* fundamental file system block size */
  285.     unsigned blocks;    /* total blocks in file system */
  286.     unsigned bfree;    /* free blocks in fs */
  287.     unsigned bavail;    /* free blocks avail to non-superuser */
  288. };
  289.  
  290. union statfsres switch (nfsstat status) {
  291. case NFS_OK:
  292.     statfsokres reply;
  293. default:
  294.     void;
  295. };
  296.  
  297. /*
  298.  * Remote file service routines
  299.  */
  300. program NFS_PROGRAM {
  301.     version NFS_VERSION {
  302.         void 
  303.         NFSPROC_NULL(void) = 0;
  304.  
  305.         attrstat 
  306.         NFSPROC_GETATTR(nfs_fh) =    1;
  307.  
  308.         attrstat 
  309.         NFSPROC_SETATTR(sattrargs) = 2;
  310.  
  311.         void 
  312.         NFSPROC_ROOT(void) = 3;
  313.  
  314.         diropres 
  315.         NFSPROC_LOOKUP(diropargs) = 4;
  316.  
  317.         readlinkres 
  318.         NFSPROC_READLINK(nfs_fh) = 5;
  319.  
  320.         readres 
  321.         NFSPROC_READ(readargs) = 6;
  322.  
  323.         void 
  324.         NFSPROC_WRITECACHE(void) = 7;
  325.  
  326.         attrstat
  327.         NFSPROC_WRITE(writeargs) = 8;
  328.  
  329.         diropres
  330.         NFSPROC_CREATE(createargs) = 9;
  331.  
  332.         nfsstat
  333.         NFSPROC_REMOVE(diropargs) = 10;
  334.  
  335.         nfsstat
  336.         NFSPROC_RENAME(renameargs) = 11;
  337.  
  338.         nfsstat
  339.         NFSPROC_LINK(linkargs) = 12;
  340.  
  341.         nfsstat
  342.         NFSPROC_SYMLINK(symlinkargs) = 13;
  343.  
  344.         diropres
  345.         NFSPROC_MKDIR(createargs) = 14;
  346.  
  347.         nfsstat
  348.         NFSPROC_RMDIR(diropargs) = 15;
  349.  
  350.         readdirres
  351.         NFSPROC_READDIR(readdirargs) = 16;
  352.  
  353.         statfsres
  354.         NFSPROC_STATFS(nfs_fh) = 17;
  355.     } = 2;
  356. } = 100003;
  357.  
  358.